package 文件.综合练习;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class 练习六 {
    public static void main(String[] args) {
        File file=new File("D:\\F");
        System.out.println(getNum(file));

    }
    //定义一个方法统计一个文件夹中每种文件的个数
    public static HashMap<String,Integer> getNum(File src){
        //创建Map集合存储相应的文件个数
        HashMap<String,Integer> map=new HashMap<>();
        //1.获取文件夹中的内容
        File[] arr = src.listFiles();
        for (File f : arr) {
            //如果遍历到的是文件就进行记录和添加
            if (f.isFile()){
                //获取文件的后缀
                String key=f.getName().split("\\.")[1];
                //判断map中是否存在者中种文件格式
                //如果存在这种文件格式
                if (map.containsKey(key)){
                    //获取键对应的值的大小
                    Integer value = map.get(key);
                    value++;
                    map.put(key,value);
                    //不存在这个格式
                }else {
                    System.out.println(key);
                    map.put(key,1);
                }
                //如果不是文件就递归这个文件夹
            }else {
                //递归这个目录
                HashMap<String, Integer> map1 = getNum(f);
                //合并这两个目录的值
                for (Map.Entry<String, Integer> entry : map1.entrySet()) {
                    //得到map1集合的每个键和值
                    String key=entry.getKey();
                    Integer value = entry.getValue();
                    //如果map集合包含map1集合的键
                    if (map.containsKey(key)){
                        map.put(key,map.get(key)+value);
                    }
                    //如果不包含就直接添加到map集合中
                    map.put(key,value);
                }
            }
        }
        return map;
    }
}
